import csv
import json
import random
import re

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}  # 模拟游览器
headers["X-Forwarded-For"] = "%s.%s.%s.%s" % (
    random.randrange(1, 200, 20), random.randrange(1, 200, 20), random.randrange(1, 200, 20),
    random.randrange(1, 200, 20))  # IP地址构造

with open("data/series.txt", "r", encoding="utf-8") as lines:
    for line in lines:
        print(line.split(",")[0])
        url = 'https://price.pcauto.com.cn/%s/config.html' % (line.split(",")[0])

        ret = requests.get(url=url, headers=headers).text  # 发送请求

        try:
            config = re.findall('config = (.*?)};', ret)
            # option = re.findall('option = (.*?)};', ret)

            data_list = []
            str_config = str(config[0]).replace("curId", "\"curId\"")
            # str_option = str(option[0]).replace("curId", "\"curId\"")

            data_list.append(json.loads(str_config + "}"))
            # data_list.append(json.loads(str_option + "}"))

            configItem = data_list[0]['body']['items']
            # optionItem = data_list[1]['body']['items']

            car_item = {}
            for typ in configItem:
                for car in typ["ModelExcessIds"]:
                    car_item[typ["Name"]] = []
                    for value in typ['ModelExcessIds']:
                        k = value["Value"]
                        car_item[typ["Name"]].append(k)

            # for typ in optionItem:
            #     for car in typ["ModelExcessIds"]:
            #         car_item[typ["Name"]] = []
            #         for value in typ['ModelExcessIds']:
            #             k = value["Value"]
            #             car_item[typ["Name"]].append(k)

            # ============================= #
            #           持久化方式一
            # ============================= #

            # 1. 创建文件对象
            # f = open('data/汽车参数_太平洋汽车.csv', 'a', encoding='utf-8', newline='')

            # 2. 基于文件对象构建 csv写入对象
            # csv_writer = csv.writer(f)

            # li = [i for i in car_item]

            # 3. 构建列表头
            # csv_writer.writerow(li)

            # 4. 写入csv文件内容
            # for i in range(len(car_item['车型名称'])):
            #     lis = []
            #     for k in li:
            #         try:
            #             lis.append(car_item[k][i].replace('&nbsp;', ''))
            #         except:
            #             pass
            #     csv_writer.writerow(lis)

            # 5. 关闭文件
            # f.close()

            # ============================= #
            #           持久化方式二
            # ============================= #
            # li = [i for i in car_item]
            config_headers = ['购置税', '最终落地价（含保险款项）', '耗能费用（两万公里/年）', '车型名称', '厂商指导价(元)', '厂商', '级别', '上市时间', '发动机',
                              '进气形式', '最大马力(PS)',
                              '最大扭矩(N·m)', '电动机最大马力(PS)', '电动机总功率(kW)', '电动机总扭矩(N·m)', '电池充电时间', '快充电量(%)', '变速箱',
                              '车身类型', '长×宽×高(mm)',
                              '轴距(mm)', '最高车速(km/h)', '官方0-100km/h加速(s)', '实测0-100km/h加速(s)', '实测100-0km/h制动(m)',
                              '实测油耗(L/100km)',
                              '实测纯电续航里程(km)', '实测快充时间(小时)', '实测慢充时间(小时)', '实测百公里耗电量(kWh/100km)',
                              '实测车速0km/h(怠速)环境噪音(dB)',
                              '实测车速60km/h环境噪音(dB)', '实测车速90km/h环境噪音(dB)', '实测车速120km/h环境噪音(dB)', '工信部综合油耗(L/100km)',
                              'B状态综合油耗(L/100km)',
                              '电池保修时间', '工信部纯电续航里程(km)', '整车质保', '首任车主质保政策', '驾驶辅助级别', '参配看图', '长度(mm)', '宽度(mm)',
                              '高度(mm)', '前轮距(mm)',
                              '后轮距(mm)', '最小离地间隙(mm)', '车重(kg)', '车门数(个)', '座位数(个)', '油箱容积(L)', '行李厢容积(L)',
                              '行李厢最大容积(L)', '行李厢内部尺寸(mm)',
                              '发动机型号', '排量(mL)', '最大功率(kW)', '最大功率转速(rpm)', '最大扭矩转速(rpm)', '气缸排列形式', '气缸数(个)',
                              '每缸气门数(个)', '压缩比', '配气机构',
                              '缸径(mm)', '行程(mm)', '发动机特有技术', '燃料形式', '燃油标号', '供油方式', '缸盖材料', '缸体材料', '排放标准', '电动机型号',
                              '电机类型',
                              '前电动机最大功率(kW)', '前电动机最大扭矩(N·m)', '后电动机最大功率(kW)', '后电动机最大扭矩(N·m)', '驱动模式', '驱动电机数', '电机布局',
                              '系统综合功率(kW)',
                              '系统综合扭矩(N·m)', '官方百公里耗电量(kWh/100km)', '电池容量(kWh)', '电池能量密度(Wh/kg)', '电池类型', '简称', '挡位个数',
                              '变速箱类型', '驱动方式',
                              '四驱形式', '中央差速器结构', '前悬挂类型', '后悬挂类型', '转向助力类型', '车体结构', '前制动器类型', '后制动器类型', '驻车制动类型',
                              '前轮胎规格', '后轮胎规格',
                              '备胎规格', '备胎尺寸', '接近角(°)', '离去角(°)', '纵向通过角(°)', '最大爬坡度(%)/爬坡角度(°)', '最小转弯半径(m)',
                              '最大涉水深度(mm)']

            for i in range(len(car_item['车型名称'])):
                car = {}
                line = line.split(",")[0] + ","
                for k in config_headers:
                    try:
                        # 防止字符中出现的 "," => 干扰分隔符
                        car[k] = car_item[k][i].replace(",", ";")
                    except:
                        car[k] = '-'
                    finally:
                        line = line + car[k] + ","
                with open("data/汽车参数_太平洋汽车_new.csv", 'a', encoding='utf-8') as f:
                    line = line[:-1] + "\n"
                    f.write(line)
        except:
            with open("data/error_pcauto_new.txt", 'a') as e:
                e.write(line.split(",")[0] + "\n")

